Technical Q&A HW19
Explicitly Forcing PCI Burst Transfers


Q: I am writing a device driver as well as diagnostic software for our new PCI card, which is capable of receiving PCI burst transfers (it is not a bus master).

How does one explicitly force PCI burst transfers? Is this done automatically when one calls BlockMove with a sufficiently large Size parameter?

A: Within the System's address space, main memory defaults to write back cache mode while PCI memory space defaults to cache inhibit mode. To enable the PowerPC to burst to areas of PCI memory space, the particular area must be set to a cacheable setting. However, extreme care must be taken to perform appropriate cache flushing when operating on cacheable PCI memory space. Drivers that control PCI masters may wish to experiment with different cache modes for their particular DMA buffer spaces to determine optimal settings. There is a SetProcessorCacheMode function in the Drive Services Library (DSL).

BlockCopy in the DSL uses BlockMoveData memory management primitive to move the bytes. BlockMoveData is optimized for cached data while BlockMoveDataUncached is optimized for uncached data.

For more information, refer to Designing PCI Cards and Drivers

[Jul 15 1995]


Developer Documentation | Technical Notes | Development Kits | Sample Code